package view.interfaces;

import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;

import Util.Constants;
import business.dao.ProdutoDAO;
import business.model.ProdutoTO;
import business.model.tableModel.ProdutoTableModel;
import exception.BusinessException;
import exception.InterfaceException;
import exception.UsuarioException;

public class telaProdutos extends JFrame {

	private JPanel contentPane;
	private JTextField txtProduto;
	private JTable tblListar;
	private ProdutoDAO produtoDAO = new ProdutoDAO();
	ProdutoTableModel produtoTableModel;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					telaProdutos frame = new telaProdutos();
					frame.setVisible(true);
					frame.listar();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	private void listar() {
		// TODO Auto-generated method stub
		try {
			produtoTableModel = new ProdutoTableModel(produtoDAO.listar(null));
			tblListar.setModel(produtoTableModel);
			tblListar.setEnabled(Boolean.TRUE);

		} catch (UsuarioException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (BusinessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterfaceException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	private void limpar() {
		// TODO Auto-generated method stub
		txtProduto.setText("");
	}

	/**
	 * Create the frame.
	 */
	public telaProdutos() {
		setTitle("Produtos");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 394, 410);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);

		JLabel lblNewLabel = new JLabel("Adicionar Produto");
		lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 14));

		JLabel lblProduto = new JLabel("Produto: ");
		lblProduto.setFont(new Font("Tahoma", Font.BOLD, 11));

		txtProduto = new JTextField();
		txtProduto.setColumns(10);

		JButton btnSalvar = new JButton("SALVAR");
		btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				try {
					ProdutoTO produtoTO = new ProdutoTO();
					produtoTO.setDescricao(txtProduto.getText());
					produtoDAO.incluir(produtoTO);
					listar();
					limpar();
				} catch (UsuarioException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (BusinessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InterfaceException e) {
					// TODO Auto-generated catch block
					JOptionPane.showMessageDialog(rootPane, e.getMessage(),
							Constants.Telas.TELA_PRODUTOS,
							JOptionPane.OK_OPTION);
				}

			}
		});
		btnSalvar.setFont(new Font("Tahoma", Font.BOLD, 12));

		tblListar = new JTable();
		tblListar.setBorder(new LineBorder(new Color(0, 0, 0)));

		JButton btnDeletar = new JButton("DELETAR");
		btnDeletar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (tblListar.getSelectedRow() >= 0) {
					try {
						produtoDAO.excluir(produtoTableModel.produto
								.get(tblListar.getSelectedRow()));
						listar();
					} catch (UsuarioException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (BusinessException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (InterfaceException e1) {
						// TODO Auto-generated catch block
						JOptionPane.showMessageDialog(rootPane,
								e1.getMessage(), Constants.Telas.TELA_PRODUTOS,
								JOptionPane.OK_OPTION);
					}
				} else {
					JOptionPane.showMessageDialog(rootPane,
							"Selecione um item da lista.",
							Constants.Telas.TELA_PRODUTOS,
							JOptionPane.OK_OPTION);
				}
			}
		});
		btnDeletar.setFont(new Font("Tahoma", Font.BOLD, 12));

		JButton btnNewButton = new JButton("VOLTAR");
		btnNewButton.setFont(new Font("Tahoma", Font.BOLD, 12));
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new telaAdministrador().setVisible(true);
				setVisible(false);
			}
		});
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane
				.setHorizontalGroup(gl_contentPane
						.createParallelGroup(Alignment.LEADING)
						.addGroup(
								gl_contentPane
										.createSequentialGroup()
										.addGroup(
												gl_contentPane
														.createParallelGroup(
																Alignment.LEADING)
														.addGroup(
																gl_contentPane
																		.createSequentialGroup()
																		.addComponent(
																				lblNewLabel,
																				GroupLayout.PREFERRED_SIZE,
																				183,
																				GroupLayout.PREFERRED_SIZE)
																		.addGap(94)
																		.addComponent(
																				btnNewButton))
														.addGroup(
																gl_contentPane
																		.createSequentialGroup()
																		.addGap(97)
																		.addComponent(
																				btnSalvar)
																		.addPreferredGap(
																				ComponentPlacement.UNRELATED)
																		.addComponent(
																				btnDeletar))
														.addGroup(
																gl_contentPane
																		.createParallelGroup(
																				Alignment.TRAILING,
																				false)
																		.addComponent(
																				tblListar,
																				Alignment.LEADING,
																				GroupLayout.DEFAULT_SIZE,
																				GroupLayout.DEFAULT_SIZE,
																				Short.MAX_VALUE)
																		.addGroup(
																				Alignment.LEADING,
																				gl_contentPane
																						.createSequentialGroup()
																						.addComponent(
																								lblProduto)
																						.addPreferredGap(
																								ComponentPlacement.RELATED)
																						.addComponent(
																								txtProduto,
																								GroupLayout.DEFAULT_SIZE,
																								303,
																								Short.MAX_VALUE))))
										.addContainerGap(
												GroupLayout.DEFAULT_SIZE,
												Short.MAX_VALUE)));
		gl_contentPane
				.setVerticalGroup(gl_contentPane
						.createParallelGroup(Alignment.LEADING)
						.addGroup(
								gl_contentPane
										.createSequentialGroup()
										.addContainerGap()
										.addGroup(
												gl_contentPane
														.createParallelGroup(
																Alignment.BASELINE)
														.addComponent(
																lblNewLabel)
														.addComponent(
																btnNewButton))
										.addGap(19)
										.addGroup(
												gl_contentPane
														.createParallelGroup(
																Alignment.BASELINE)
														.addComponent(
																lblProduto)
														.addComponent(
																txtProduto,
																GroupLayout.PREFERRED_SIZE,
																GroupLayout.DEFAULT_SIZE,
																GroupLayout.PREFERRED_SIZE))
										.addGap(18)
										.addGroup(
												gl_contentPane
														.createParallelGroup(
																Alignment.BASELINE)
														.addComponent(btnSalvar)
														.addComponent(
																btnDeletar))
										.addGap(18)
										.addComponent(tblListar,
												GroupLayout.DEFAULT_SIZE, 230,
												Short.MAX_VALUE)));
		gl_contentPane.linkSize(SwingConstants.VERTICAL, new Component[] {
				btnSalvar, btnDeletar });
		gl_contentPane.linkSize(SwingConstants.HORIZONTAL, new Component[] {
				btnSalvar, btnDeletar });
		contentPane.setLayout(gl_contentPane);
	}
}
